package com.java.common.lang.enums;

import com.java.common.constant.ProjectConstants;

/**
 * 接口前缀
 * 
 * @author yilabao
 * @date 2021年1月25日
 */
public enum RestPrefixEnum {

    /**
     * 后台接口前缀
     */
    ADMIN("admin"),

    /**
     * API接口前缀
     */
    API("api"),

    /**
     * PC接口前缀
     */
    PC(""),

    ;

    private final String prefix;

    RestPrefixEnum(String prefix) {
        this.prefix = prefix;
    }

    public String getPrefix() {
        return prefix;
    }

    public String getPathPrefix() {
        final String slash = "/";
        return slash + prefix;
    }

    /**
     * 根据控制器类所在包，判断是否加相应前缀
     * 
     * @author yilabao
     * @date 2021年1月25日
     * @param c
     * @param restPrefix
     * @return boolean
     */
    public static boolean isAddPrefix(Class<?> c, RestPrefixEnum restPrefix) {
        final String className = c.getName();
        final String dot = ".";
        final boolean isProjectClass = className.indexOf(ProjectConstants.PROJECT_PACKAGE) == 0;
        return isProjectClass && className.contains(dot + restPrefix.getPrefix() + dot);
    }

    /**
     * 根据控制器类所在包，获取接口前缀枚举
     * 
     * @author yilabao
     * @date 2021年1月25日
     * @param c
     * @return RestPrefixEnum
     */
    public static RestPrefixEnum getRestPrefixEnum(Class<?> c) {
        RestPrefixEnum[] restPrefixEnumArr = RestPrefixEnum.values();
        for (int i = 0; i < restPrefixEnumArr.length; i++) {
            RestPrefixEnum restPrefix = restPrefixEnumArr[i];
            if (isAddPrefix(c, restPrefix)) {
                return restPrefix;
            }
        }
        return PC;
    }

}